تفاوت بین ()services.Configure و services.AddOptions<T>().Bind هنگام لود کانفیگ در ASP.NET Core چیست؟

آخرین بروز رسانی: 1400/12/21

در پروژه ASP.NET Core  WebApi خودم، می‌خوام پیکربندی را از appsettings.json در یک آبجکت هست بخونم.

appsettings.json دارای بخش پیکربندی زیر است:

{
  "MySettings1": {
    "Name": "John Smith",
    "Age": "25",
  }
}

من کلاس زیر ایحاد کردم که کعادل قایل کانفیگ هست

public class MySettings
{
    public string Name { get; set; }
    public int Age { get; set; }
}

من می توانم این کار را در متد ()Startup.ConfigureServices به صورت زیر انجام دهم:

services.Configure<MySettings>(configuration.GetSection("MySettings1"));

یا

services.AddOptions<MySettings>().Bind(configuration.GetSection("MySettings1"));

تفاوت این دو چیه؟ هر دوی آنها خوب کار می کنند و باهاشون میشه نمونه مناسب IOptions<MySettings> را در HomeController در هر دو مورد تزریق کرد.

 

هر دو روش کار یکسانی را انجام می دهند اما AddOptions بعداً آمد و امکان سفارشی سازی های بیشتری را فراهم می کند.

Configure (Action configureOptions) و OptionsBuilder.Configure (Action configureOptions) هر دو یک کار را انجام می دهند:

services.AddSingleton<IConfigureOptions<TOptions>>(new ConfigureNamedOptions<TOptions>(name, configureOptions));

OptionsBuilder.Bind (Iconfiguration config) در واقع Configure (IConfiguration config) را مستقیماً فراخوانی می کند، بنابراین آنها نیز معادل هستند.

بنابراین هر دو API قابل تعویض هستند. و  خدمات مشابه را اراعه میدن. OptionsBuilder ا بعداً به وجود آمد تا کنترل بیشتری را با روش‌های کاربردی مختلف فراهم کند. اما جایگزینی برای services.Configure نیست.

نظر دهید

آدرس ایمیل شما منتشر نخواهد شد. فیلدهای الزامی علامت گذاری شده اند *